/**
 * 实时日志管理器
 */
class LogManager {
  constructor() {
    this.io = null;
    this.buildLogs = new Map(); // 存储构建日志
  }

  /**
   * 初始化Socket.IO实例
   */
  init(io) {
    this.io = io;
    console.log('📋 日志管理器已初始化');
  }

  /**
   * 发送日志到指定项目
   */
  sendLog(projectId, logData) {
    if (!this.io) {
      console.warn('⚠️  Socket.IO未初始化');
      return;
    }

    const logEntry = {
      timestamp: new Date().toISOString(),
      level: logData.level || 'info',
      message: logData.message,
      data: logData.data || null
    };

    // 存储日志
    if (!this.buildLogs.has(projectId)) {
      this.buildLogs.set(projectId, []);
    }
    this.buildLogs.get(projectId).push(logEntry);

    // 发送到客户端
    this.io.to(`build-${projectId}`).emit('build-log', logEntry);
    
    // 同时输出到控制台
    const emoji = this.getEmoji(logData.level);
    console.log(`${emoji} [${projectId}] ${logData.message}`);
  }

  /**
   * 发送构建开始日志
   */
  sendBuildStart(projectId, buildConfig) {
    this.sendLog(projectId, {
      level: 'info',
      message: '🚀 开始构建项目',
      data: buildConfig
    });
  }

  /**
   * 发送构建步骤日志
   */
  sendBuildStep(projectId, step, message, data = null) {
    this.sendLog(projectId, {
      level: 'info',
      message: `📋 ${step}: ${message}`,
      data
    });
  }

  /**
   * 发送构建成功日志
   */
  sendBuildSuccess(projectId, result) {
    this.sendLog(projectId, {
      level: 'success',
      message: '✅ 构建成功完成',
      data: result
    });
  }

  /**
   * 发送构建错误日志
   */
  sendBuildError(projectId, error) {
    this.sendLog(projectId, {
      level: 'error',
      message: `❌ 构建失败: ${error.message}`,
      data: error
    });
  }

  /**
   * 发送Docker构建日志
   */
  sendDockerLog(projectId, message, data = null) {
    this.sendLog(projectId, {
      level: 'info',
      message: `🐳 ${message}`,
      data
    });
  }

  /**
   * 发送依赖安装日志
   */
  sendDependencyLog(projectId, message, data = null) {
    this.sendLog(projectId, {
      level: 'info',
      message: `📦 ${message}`,
      data
    });
  }

  /**
   * 发送打包日志
   */
  sendPackageLog(projectId, message, data = null) {
    this.sendLog(projectId, {
      level: 'info',
      message: `📦 ${message}`,
      data
    });
  }

  /**
   * 发送系统级日志（用于进程错误等）
   */
  sendSystemLog(type, data) {
    if (!this.io) {
      console.warn('⚠️  Socket.IO未初始化');
      return;
    }

    const logEntry = {
      timestamp: new Date().toISOString(),
      type,
      level: 'system',
      message: data.message,
      data: data
    };

    // 广播系统日志给所有连接的客户端
    this.io.emit('system-log', logEntry);
    
    console.log(`🔧 [SYSTEM] ${data.message}`);
  }

  /**
   * 发送重试日志
   */
  sendRetryLog(projectId, attempt, maxAttempts, error) {
    this.sendLog(projectId, {
      level: 'warning',
      message: `🔄 构建失败，正在进行第${attempt}/${maxAttempts}次重试`,
      data: { attempt, maxAttempts, error: error.message }
    });
  }

  /**
   * 获取项目日志历史
   */
  getBuildLogs(projectId) {
    return this.buildLogs.get(projectId) || [];
  }

  /**
   * 清理项目日志
   */
  clearBuildLogs(projectId) {
    this.buildLogs.delete(projectId);
  }

  /**
   * 获取日志级别的emoji
   */
  getEmoji(level) {
    const emojis = {
      'info': 'ℹ️',
      'success': '✅',
      'warning': '⚠️',
      'error': '❌',
      'docker': '🐳',
      'dependency': '📦',
      'package': '📦'
    };
    return emojis[level] || 'ℹ️';
  }
}

// 创建单例实例
const logManager = new LogManager();

module.exports = logManager;
